// store/index.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

/**
 * 加载所有模块并生成正确的命名空间路径
 * @param {Object} context - require.context 返回的上下文
 * @returns {Object} 包含所有模块的对象
 */
function loadModules(context) {
  return context.keys().reduce((modules, key) => {
    // 生成模块名：去掉 ./ 和 .js，将路径分隔符转换为 /
    const moduleName = key
      .replace(/^\.\//, '')          // 去掉开头的 ./
      .replace(/\/index\.js$/, '')   // 去掉 /index.js
      .replace(/\.js$/, '')          // 去掉其他 .js
      .replace(/\\/g, '/');          // 将 Windows 的反斜杠转换为正斜杠
    
    // 动态导入模块
    const module = context(key).default;
    
    // 跳过空路径（如 index.js 在根目录）
    if (!moduleName) return modules;
    
    // 注册模块
    modules[moduleName] = {
      namespaced: true,
      ...module
    };
    
    return modules;
  }, {});
}

// 自动加载 modules 目录下的所有 .js 文件（包括子目录）
const modulesContext = require.context('./modules', true, /\.js$/);
const modules = loadModules(modulesContext);

export default new Vuex.Store({
  modules
});